<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
body{line-height:1.5;font-size:10pt;}
.bg{background-color:#BBBEDF;}
.blue{color:blue;}
</style>
</head>

<body>
<h3>SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错</h3>
<img src="../images/Snap2.jpg" />
<div class="bg">
一种情况:config.web配置文件中服务器名没法解析.<br />
SQL Server2005的安全性,默认仅限于本地连接,并没有打开远程连接; 
  <br />
  打开远程连接方法: 
开始->所有程序->MS SQL Server2005->配置工具->MS SQL Server2005外围应用配置器->服务器和连接的外围应用配置器-><br /> 
Database Engine下远程连接选择"本地连接和远程连接"中同时使用"TCP/IP和name pipes" 
<br />
Analysis Services下远程连接选择"本地连接和远程连接" 
<br />
应用后重启数据库 </div>
<h3>provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错</h3>
<div class="bg">上述错误我遇到两种情况,一种是在打开打开SQL Server 2005时弹出的,另一种是在应用程序连接SQL Server 2005时出现的.归纳了一下,由以下几个原因:<br />
  <br />
  1.数据库引擎没有启动.<br />
  <br />
        有两种启动方式:<br />
  <br />
       (1)开始-&gt;程序-&gt;Microsoft SQL Server 2005-&gt;SQL Server 2005外围应用配置器,在打开的界面单击&quot;服务的连接的外围应用配置器&quot;,在打开的界面中找到Database Engine,单击&quot;服务&quot;,在右侧查看是否已启动,如果没有启动可单击&quot;启动&quot;,并确保&quot;启动类型&quot;为自动,不要为手动,否则下次开机时又要手动启动;<br />
  <br />
       (2)可打开:开始-&gt;程序-&gt;Microsoft SQL Server 2005-&gt;配置工具-&gt;SQL Server Configuration Manager,选中SQL Server 2005服务中SQL Server(MSSQLSERVER) ,并单击工具栏中的&quot;启动服务&quot;按钮把服务状态改为启动;<br />
  <br />
        使用上面两种方式时,有时候在启动的时候可能会出现错误,不能启动,这时就要查看&quot;SQL Server 2005配置管理器&quot;中的SQL  Server 2005网络配置-&gt;MSSQLSERVER协议中的VIA是否已启用,如果已启用,则把它禁止.然后再执行上述一种方式操作就可以了.<br />
  <br />
  2.进行远程连接时,是否已允许远程连接.<br />
  <br />
        SQL Server 2005 在默认情况下仅限本地连接.我们可以手动启用远程连接.在上面第一种方式中,找到Database Engine,单击&quot;远程连接&quot;,在右侧将&quot;仅限本地连接(L)&quot;改为&quot;本地连接和远程连接(R)&quot;,并选中&quot;同时使用TCP/IP和named pipes(B)&quot;.<br />
  <br />
  3.如果是远程连接,则还要查看连接数据库的语句是否正确,登录账户是否正确,密码是否正确等.<br />
  <br />
        我在一次局域网内连接数据库时,就要因为连接字符串出了问题,在局域网内一台机子连接另一台机子上数据库时,把server=装有数据库的另一台机子的IP.我在连接数据库时总是出现上面的错误,查了好长时间,后来发现,IP没有正确到传到连接字符串,原来我在连接时,使用的是本地,即127.0.0.1,输入的IP没有传到连接字符串.<br />
</div>
<h3>Server连接中的四个最常见错误</h3>
<div class="bg">
<ol>
<li class="blue">SQL   Server   不存在或访问被拒绝</li>
<p>这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.   <br />
  <br />
  一般说来,有以下几种可能性:   <br />
  <br />
  1,SQL     Server名称或IP地址拼写有误   <br />
  2,服务器端网络配置有误   <br />
  3,客户端网络配置有误   <br />
  <br />
  要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因.   <br />
  <br />
  <br />
  =============     首先,检查网络物理连接   =============   <br />
  ping   &lt;服务器IP地址/服务器名称&gt;   <br />
  <br />
  如果     ping   &lt;服务器IP地址&gt;   不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等.   <br />
  还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如   ISA   Server.防火墙软件可能会屏蔽对   ping,telnet     等的响应   <br />
  因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口.   <br />
  <br />
  如果ping     &lt;服务器IP地址&gt;   成功而,ping   &lt;服务器名称&gt;   失败   <br />
  则说明名字解析有问题,这时候要检查   DNS     服务是否正常.   <br />
  有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,   <br />
  具体的方法是:   <br />
  <br />
  1.使用记事本打开HOSTS文件（一般情况下位于C:\WINNT\system32\drivers\etc）.   <br />
  添加一条IP地址与服务器名称的对应记录,如:   <br />
  172.168.10.24   myserver   <br />
  <br />
  2.或在   SQL     Server   的客户端网络实用工具里面进行配置,后面会有详细说明.   <br />
  <br />
  <br />
  =============   其次,使用   telnet     命令检查SQL   Server服务器工作状态   =============   <br />
  telnet   &lt;服务器IP地址&gt;   1433     <br />
  <br />
  如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明   SQL   Server     服务器工作正常,并且正在监听1433端口的   TCP/IP   连接   <br />
  如果命令返回 &quot;无法打开连接 &quot;的错误信息,则说明服务器端没有启动     SQL   Server   服务,   <br />
  也可能服务器端没启用   TCP/IP   协议,或者服务器端没有在   SQL   Server     默认的端口1433上监听.   <br />
  <br />
  <br />
  =============接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道.是否启用了   TCP/IP     协议等等   =============   <br />
  可以利用   SQL   Server   自带的服务器网络使用工具来进行检查.   <br />
  <br />
  点击:程序   --   Microsoft   SQL   Server   --   服务器网络使用工具   <br />
  <br />
  打开该工具后,在 &quot;常规 &quot;中可以看到服务器启用了哪些协议.   <br />
  一般而言,我们启用命名管道以及   TCP/IP   协议.   <br />
  点中   TCP/IP   协议,选择 &quot;属性 &quot;,我们可以来检查   SQK   Server   服务默认端口的设置   <br />
  一般而言,我们使用     SQL   Server   默认的1433端口.如果选中 &quot;隐藏服务器   &quot;,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接.   <br />
  <br />
  <br />
  =============     接下来我们要到客户端检查客户端的网络配置   =============   <br />
  我们同样可以利用   SQL   Server     自带的客户端网络使用工具来进行检查,   <br />
  所不同的是这次是在客户端来运行这个工具.   <br />
  <br />
  点击:程序   --   Microsoft     SQL   Server   --   客户端网络使用工具   <br />
  <br />
  打开该工具后,在 &quot;常规 &quot;项中,可以看到客户端启用了哪些协议.   <br />
  一般而言,我们同样需要启用命名管道以及   TCP/IP   协议.   <br />
  点击   TCP/IP   协议,选择 &quot;属性   &quot;,可以检查客户端默认连接端口的设置,该端口必须与服务器一致.   <br />
  <br />
  单击 &quot;别名   &quot;选项卡,还可以为服务器配置别名.服务器的别名是用来连接的名称,   <br />
  连接参数中的服务器是真正的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件有相似之处. </p>
  <li class="blue">无法连接到服务器,用户xxx登陆失败</li>
  <p>该错误产生的原因是由于SQL   Server使用了 &quot;仅   Windows &quot;的身份验证方式,   <br />
    因此用户无法使用SQL     Server的登录帐户（如   sa   ）进行连接.解决方法如下所示:   <br />
    <br />
    1.在服务器端使用企业管理器,并且选择 &quot;使用   Windows     身份验证 &quot;连接上   SQL   Server   <br />
    操作步骤:   <br />
    在企业管理器中   <br />
    --右键你的服务器实例(就是那个有绿色图标的)   <br />
    --编辑SQL   Server注册属性   <br />
    --选择 &quot;使用windows身份验证   &quot;   <br />
    <br />
    --选择 &quot;使用SQL   Server身份验证 &quot;   <br />
    --登录名输入:sa,密码输入sa的密码   <br />
    --确定   <br />
    <br />
    2.设置允许SQL   Server身份登录   <br />
    操作步骤:   <br />
    在企业管理器中   <br />
    --展开 &quot;SQL     Server组 &quot;,鼠标右键点击SQL   Server服务器的名称   <br />
    --选择 &quot;属性 &quot;   <br />
    --再选择 &quot;安全性 &quot;选项卡   <br />
    --在 &quot;身份验证 &quot;下,选择 &quot;SQL   Server和   Windows   &quot;.   <br />
    --确定,并重新启动SQL     Server服务.   <br />
    <br />
    在以上解决方法中,如果在第   1   步中使用 &quot;使用   Windows   身份验证 &quot;连接   SQL     Server   失败,   <br />
    那就通过修改注册表来解决此问题:   <br />
    <br />
    1.点击 &quot;开始 &quot;- &quot;运行   &quot;,输入regedit,回车进入注册表编辑器   <br />
    2.依次展开注册表项,浏览到以下注册表键:   <br />
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]   <br />
    3.在屏幕右方找到名称 &quot;LoginMode &quot;,双击编辑双字节值   <br />
    4.将原值从1改为2,点击 &quot;确定 &quot;   <br />
    5.关闭注册表编辑器     <br />
    6.重新启动SQL   Server服务.   <br />
    <br />
    此时,用户可以成功地使用sa在企业管理器中新建SQL   Server注册,   <br />
    但是仍然无法使用Windows身份验证模式来连接SQL   Server.   <br />
    这是因为在   SQL   Server     中有两个缺省的登录帐户:   <br />
    BUILTIN\Administrators   <br />
    &lt;机器名&gt; \Administrator     被删除.   <br />
    要恢复这两个帐户,可以使用以下的方法:   <br />
    <br />
    1.打开企业管理器,展开服务器组,然后展开服务器   <br />
    <br />
    2.展开   &quot;安全性 &quot;,右击 &quot;登录 &quot;,然后单击 &quot;新建登录 &quot;   <br />
    <br />
    3.在 &quot;名称 &quot;框中,输入   BUILTIN\Administrators   <br />
    <br />
    4.在 &quot;服务器角色 &quot;选项卡中,选择 &quot;System   Administrators &quot;   <br />
    <br />
    5.点击 &quot;确定 &quot;退出   <br />
    <br />
    6.使用同样方法添加   &lt;机器名&gt; \Administrator   登录.   <br />
    <br />
    说明:   <br />
    <br />
    以下注册表键:   <br />
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode   <br />
    的值决定了SQL   Server将采取何种身份验证模式.   <br />
    1.表示使用 &quot;Windows   身份验证 &quot;模式   <br />
    2.表示使用混合模式（Windows   身份验证和   SQL   Server   身份验证）.   </p>
    <li class="blue">提示连接超时</li>
    <p>如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,   <br />
      不过是由于连接的时间大于允许的时间而导致出错.   <br />
      这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,   <br />
      并且是慢速连接时,有可能会导致以上的超时错误.有些情况下,由于局域网的网络问题,也会导致这样的错误.   <br />
      <br />
      要解决这样的错误,可以修改客户端的连接超时设置.   <br />
      默认情况下,通过企业管理器注册另外一台SQL   Server的超时设置是   4     秒,   <br />
      而查询分析器是   15   秒（这也是为什么在企业管理器里发生错误的可能性比较大的原因）.   <br />
      <br />
      具体步骤为:   <br />
      企业管理器中的设置:   <br />
      1.在企业管理器中,选择菜单上的 &quot;工具 &quot;,再选择 &quot;选项 &quot;   <br />
      2.在弹出的 &quot;SQL     Server企业管理器属性 &quot;窗口中,点击 &quot;高级 &quot;选项卡   <br />
      3.在 &quot;连接设置 &quot;下的 &quot;登录超时（秒） &quot;右边的框中输入一个比较大的数字,如     20.   <br />
      <br />
      查询分析器中的设置:   <br />
    工具   --   选项   --   连接   --   将登录超时设置为一个较大的数字   </p>
    <li class="blue">大部分机都用Tcp/ip才能成功，有次我发现用Named   Pipes才可以？</li>
    <p>回复人：   leimin(黄山光明顶)   <br />
      <br />
      这是因为在WINDOWS   2000以后的操作系统中，MS为解决SQL     SERVER的安全问题将TCP/IP配置   <br />
      为SQLSERVER的默认连接协议，你可以在CLIENT   NETWORK     UTILITY中看到TCP/IP和NAME   PIPE   <br />
      的顺序。   <br />
      <br />
      你也可以在：   <br />
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]     <br />
      &quot;ProtocolOrder &quot;=hex(7):74,00,63,00,70,00,00,00,00,00   <br />
      看到默认的协议。   <br />
      <br />
      2.怎么在程序中更改Named   Pipes   ，   Tcp/ip   ，其sql语句怎么写？   <br />
      你可以在上面提到的注册表的位置修改：   <br />
      CLIENT端：   <br />
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]     <br />
      &quot;ProtocolOrder &quot;=hex(7):74,00,63,00,70,00,00,00,00,00   <br />
      <br />
      SERVER端：   <br />
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib]     <br />
      &quot;ProtocolOrder &quot;=hex(7):74,00,63,00,70,00,00,00,00,00   <br />
    </p>
</ol>
</div>
</body>
</html>
